package ocio.actions;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import ocio.beans.Producto;
import ocio.beans.Subscripcion;
import ocio.services.ProductoService;
import ocio.services.SubscripcionService;
import ocio.services.ServiceLocator;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Clase destinataria de petición para mostrar los productos que se ajustan 
 * a las alertas a las que se ha subscrito un usuario.
 * @author Esther García Galán
 * @author Rubén Gómez Vales
 * @version 1.0 13/05/2014
 * @see ocio.beans.Subscripcion
 */
public class AvisosSubscripcionesAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private int id; //de la subscripcion
	private List<Producto> listaProductos = new ArrayList<Producto>();
	private String mensaje;

	public AvisosSubscripcionesAction(){}

	  /**
	 * Método execute() de la clase ActionSupport de Struts 2. 
	 * Solicita los servicios para localizar los productos que se cumplan con las condiciones
	 * que el usuario ha establecido en la subscripcion.
	 * @return un string que indica la respuesta de la acción ejecutada sobre la petición del usuario
	 */
	public String execute(){
			
		ServiceLocator serviceLocator = ServiceLocator.getServiceLocator();
		ProductoService prodS = (ProductoService)serviceLocator.getService("Producto");
		SubscripcionService subS = (SubscripcionService)serviceLocator.getService("Subscripcion");
					
		//Recuperamos los criterios de la subscripcion elegida
		Subscripcion s = new Subscripcion();
		s=(Subscripcion)subS.searchById(id);
		
		//Buscamos con esos criterios para recuperar productos que los cumplan...
		Producto p = new Producto();
		p.setSubtipo(s.getSubtipo());
		p.setProvincia(s.getProvincia());
			
		//productos que cumplen una de las subscripciones, añadir al SET
		if (prodS.searchByFields(p).size()==0){
			setMensaje("No existen productos que cumplan las condiciones de la subscripción elegida.");
			return "fail";
		} else {
			Iterator<Object> itrLPaux = prodS.searchByFields(p).iterator();
			while (itrLPaux.hasNext()){
				Producto pro = (Producto)itrLPaux.next();
				this.listaProductos.add(pro);
			}		
			return "success";
		}
	}

	public List<Producto> getListaProductos() {
		return listaProductos;
	}

	public void setListaProductos(List<Producto> listaProductos) {
		this.listaProductos = listaProductos;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getMensaje() {
		return mensaje;
	}

	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}


}
